package com.udima.reglocation;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.udima.reglocation.entities.User;
import com.udima.reglocation.entities.UserSession;
import com.udima.reglocation.rest.RestUser;
import com.udima.reglocation.rest.RestUserSession;
import com.udima.reglocation.util.AsyncTaskCompleteListener;
import com.udima.reglocation.util.HttpAsyncTask;
import com.google.gson.Gson;

public class LoginActivity extends Activity implements AsyncTaskCompleteListener{

	private Activity activity=this;
	private TextView lblGotoRegister;
	private Button btnLogin;
	private Button btnLogout;
	private EditText inputUser;
	private EditText inputPassword;
	private static TextView loginErrorMsg;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		
		inputUser     = (EditText) findViewById(R.id.txtUser);
		inputPassword = (EditText) findViewById(R.id.txtPass);
		btnLogin      = (Button)   findViewById(R.id.btnLogin);
		btnLogout     = (Button)   findViewById(R.id.btnLogout);
		loginErrorMsg = (TextView) findViewById(R.id.login_error);

		btnLogin.setOnClickListener(new View.OnClickListener() {

			public void onClick(View view) {
				
				//Asignación de valores a la clase "restUsuario"
				RestUser restUsuario = new RestUser();
				restUsuario.setUserName(inputUser.getText().toString());
				restUsuario.setPassword(inputPassword.getText().toString());
				
				//Serialización de la clase en formato Json dentro de la cadena "loginUsuario"
				Gson gson = new Gson();
				String loginUsuario = gson.toJson(restUsuario);
				
				//Ejecución de la consulta al servicio rest de login
				HttpAsyncTask login = new HttpAsyncTask(activity);
				login.execute("http://10.0.2.2:8080/GeoUdimaServer/rest/users/login/",loginUsuario);
			}
		});
		
		btnLogout.setOnClickListener(new View.OnClickListener() {

			public void onClick(View view) {
				
				// Instancia a SharedPreferences
			    SharedPreferences pref = getApplicationContext().getSharedPreferences("com.udima.reglocation", MODE_PRIVATE); 
				
				//Asignación de valores a la clase "restUserSession"
				RestUserSession restUserSession = new RestUserSession();
				restUserSession.setUserId(pref.getString("userId",null));
				restUserSession.setSessionToken(pref.getString("sessionToken",null));
				
				//Serialización de la clase en formato Json dentro de la cadena "logoutUsuario"
				Gson gson = new Gson();
				String logoutUsuario = "{\"userSession\":"+gson.toJson(restUserSession)+"}";
				
				HttpAsyncTask logout = new HttpAsyncTask(activity);
				logout.execute("http://10.0.2.2:8080/GeoUdimaServer/rest/users/logout/",logoutUsuario);
			}
		});

		lblGotoRegister = (TextView) findViewById(R.id.gps_status);
		lblGotoRegister.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent itemintent = new Intent(LoginActivity.this,RegisterActivity.class);
				LoginActivity.this.startActivity(itemintent);
			}
		});
	}

	@Override
	//Este metodo se ejecuta despues de completarse asynctask
	/*
	public void onTaskComplete(String result, funcion_tratamiento_resultado) {
		
		funcion_tratamiento_resultado.eval(result);
		
	}

	public void onLogoutComplete(String result) {
		
	}
	
	
	public void onLoginComplete(String result) {
		*/
	
	public void onTaskComplete(String result) {
		JSONObject json = null;
		
		//Primero se transforma el resultado a un objeto Json
		try {
			json = new JSONObject(result);
			
			//Se muestra el mesaje del resultado del login generado por el servidor
			if(json.getString("responseSuccessful")=="true"){
				JSONObject jsonUserSession = json.getJSONObject("userSession");
				
				loginErrorMsg.setText("Login correcto! Usuario:" + jsonUserSession.getString("userId"));
				
				// Creación de SharedPreferences
			    SharedPreferences pref = getApplicationContext().getSharedPreferences("com.udima.reglocation", MODE_PRIVATE); 
			    Editor editor = pref.edit();
			 
			    //Almacenamiento del id del usuario y el token de la sesión en las SharedPreferences 
			    editor.putString("userId",       jsonUserSession.getString("userId"));
			    editor.putString("sessionToken", jsonUserSession.getString("sessionToken"));
			    editor.putString("lastTimeUsed", jsonUserSession.getString("lastTimeUsed"));
			     
			    // Guardado de los cambios en  SharedPreferences
			    editor.commit(); // commit changes
				
				//Se redirecciona la actividad a la siguiente pantalla de menú de la aplicación
				//Intent itemintent = new Intent(LoginActivity.this, MainMenuActivity.class);
				//LoginActivity.this.startActivity(itemintent);
			}
			else{
				loginErrorMsg.setText("Error:" + json.getString("responseErrors"));
			}
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}